当前位置: 首页 > 知识库问答 >
问题:

selenium,等待元素,页面对象模型,c#绑定

景温书
2023-03-14

我们如何等待IWebElement(重新)连接到DOM?我的场景是这样的,我从dropdown1中选择一个值,然后单击dropdown2上的数据绑定。所以当我的测试像从Dd1中选择“foo”,然后从Dd2中选择“bar”-

WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(5));
wait.Until(By.Id("foo"));

但是我真的不想把定位器字符串(“foo”)带到我的测试逻辑中,因为它似乎破坏了使用页面对象模型的意义。使用页面对象模型时,我已经有了IWebElement实例

[FindsBy(How = How.Id, Using = "ctl00_MainContentPlaceHolder_actionButtonBarControl_btnSave")]
    public IWebElement BtnSave { get; set; }

那么,您知道隐式等待IWebElement准备好进行通信的方法吗?

共有3个答案

充培
2023-03-14

我们要做的是传入原始选择器文本,如seleniumRC css=a,xpath=b

然后,我们有一个findElement方法,该方法将解析请求,通过获得适当的,并搜索元素

谢承颜
2023-03-14

如果不想使用定位器值意味着您可以使用隐式等待而不是显式等待。隐式等待也会使驱动程序实例等待给定的时间段。

与显式等待的实际区别在于,当试图查找一个或多个元素时,如果这些元素不立即可用,它会告诉Web驱动程序轮询DOM一段时间。默认设置为0

代码:

  driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

需要记住的一点是,一旦设置了隐式等待,它将在WebDriver对象实例的生命周期内保持不变。

有关更多信息,请使用此链接http://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/WebDriver.Timeouts.html#implicitlyWait(long,java.util.concurrent.TimeUnit)

从渊
2023-03-14

嗨,我知道有点晚了,但我也遇到了同样的问题,我通过以下操作(使用您的代码)解决了这个问题:

WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(5));
wait.Until(By.Id(_pageModel.BtnSave.GetAttribute("id"));

然后,它只返回ID属性的值,并停止使用元素查找污染测试代码。希望能有帮助。

 类似资料:
  • 等待元素出现在网页上的最佳方式是什么?我已经读到,我们可以使用隐式等待和功能,如网络驱动程序wait,流利的等待等,最后但不是最不重要的线程.sleep()...我使用最多,但想停止使用。 我的场景: 用户登录到网站…网站检查凭据,并以叠加的形式向用户提供报价(一种弹出窗口,但不是单独的窗口)。我需要验证叠加图上的文字。用户登录和显示覆盖之间存在时间间隔。最好的方法是什么,以便硒只等待元素不可见的

  • 我经常遇到Selenium的问题,脚本崩溃,因为我想访问尚未加载的元素。 目前我是这样做的,我在这些地方之前放了一个,但有时需要更长或更短的时间才能加载元素。 有没有办法等到元素加载完毕,一旦加载,立即继续执行其余的代码?

  • 下一个方法是: 通过的webElement是由XPath创建的(webElement总是正确的)

  • 我正试图使用Selenium来废除google maps,不幸的是,它不太好用,元素不在页面加载上,是在点击某个按钮后添加的,但似乎元素在寻找时并不总是加载。(我指的是在进行特定搜索时,点击商店、餐馆后出现的旋转木马项目) null

  • 可以在页面对象模型中处理动态元素吗? 例子: 我想从测试方法中传递输入的name属性值。

  • 问题内容: 单击特定按钮时-我的测试站点将打开模式窗口。 但是模式窗口的打开是不同的 两者都有不同的标题,不同的选项和不同的位置。现在我应该等到模态。 是否可以等到任一模态窗口(WebElement)可见? 我已经在WebDriverWait方法中进行搜索,但是所有方法都必须等到特定WebElement可见或可单击为止。 我找不到更好的方法来等到任何一个都可见。 您能提出一种解决这种情况的方法吗?