Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WebDriverWait不适用于DialogFragment-C#,Appium_C#_Selenium_Selenium Webdriver_Appium - Fatal编程技术网

WebDriverWait不适用于DialogFragment-C#,Appium

WebDriverWait不适用于DialogFragment-C#,Appium,c#,selenium,selenium-webdriver,appium,C#,Selenium,Selenium Webdriver,Appium,我正在使用Appium.NET为一个Android应用程序编写一些自动测试 我需要添加一个等待来查找一个元素,因为加载它需要一些时间 如果我使用Thread.Sleep它工作得很好,但是用WebDriverWait检查会很糟糕,但是使用WebDriverWait测试失败并且无法找到元素 工作代码: [TestMethod] public void TestMethod1() { Thread.Sleep(TimeSpan.FromSeconds(10)); IWebElemen

我正在使用Appium.NET为一个Android应用程序编写一些自动测试

我需要添加一个等待来查找一个元素,因为加载它需要一些时间

如果我使用
Thread.Sleep
它工作得很好,但是用
WebDriverWait
检查会很糟糕,但是使用
WebDriverWait
测试失败并且无法找到元素

工作代码:

[TestMethod]
public void TestMethod1()
{
    Thread.Sleep(TimeSpan.FromSeconds(10));

    IWebElement obj =  driver.FindElementByXPath("//android.widget.Button[@text='Get Started']");
    obj.Click();
}
[TestMethod]
    public void TestMethod1()
    {
        var obj = driver.FindElement(By.XPath("//android.widget.Button[@text='Get Started']"), 15);
        obj.Click();
    }
不工作:

[TestMethod]
public void TestMethod1()
{
    Thread.Sleep(TimeSpan.FromSeconds(10));

    IWebElement obj =  driver.FindElementByXPath("//android.widget.Button[@text='Get Started']");
    obj.Click();
}
[TestMethod]
    public void TestMethod1()
    {
        var obj = driver.FindElement(By.XPath("//android.widget.Button[@text='Get Started']"), 15);
        obj.Click();
    }
FindElement
是Loudenvier编写的扩展方法

日志:是线程睡眠和webdriverwait方法中的应用程序日志。谢谢你的帮助

Edit1:我试图查找的按钮元素是Android DialogFragment的一部分。当用户第一次打开应用程序时,会出现这个对话框片段,这是一种欢迎屏幕

我注意到的
WebDriverWait
实际上在主应用程序片段中等待并尝试搜索元素,但失败了。但是
Thread.Sleep
可以工作,因为在这种情况下,
对话框片段
被加载到主应用程序片段的顶部,然后webdriver在正确的片段中搜索元素。我尝试了
隐式wait
显式wait
但结果是一样的


有没有更好的方法来等待DialogFragment?

为什么不使用
显式
等待并等待驱动程序找到元素?另外,在上面的代码中,find元素机制看起来不同

[TestMethod]
public void TestMethod1()
{
  By byXpath = By.XPath("//android.widget.Button[@text='Get Started']");
  IWebElement webElement = new WebDriverWait(driver, TimeSpan.FromSeconds(10)).Until(d=>d.FindElement(byXpath));
  webElement.Click();
}

很抱歉,显式和隐式等待在此场景中不起作用,请在问题编辑部分查看原因。我不太熟悉
Appium
,但似乎您需要以某种方式将焦点切换到DialogFragment上