首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有更好的方法来使用selenium WebDriver从select2下拉列表中选择一个值?

问有没有更好的方法来使用selenium WebDriver从select2下拉列表中选择一个值?
EN

Stack Overflow用户
提问于 2021-04-18 03:04:29
回答 1查看 55关注 0票数 0

我正在使用Selenium WebDriver自动化一些东西。它需要填写一个表单,该表单涉及从select2下拉列表中选择一个值。这是我正在使用的代码片段-

代码语言:javascript
复制
final By SELECT_DIV = By.id("s2");
click(SELECT_DIV);
final By INPUT = By.cssSelector(".select2-drop-active .select2-input");
waitForVisibilityOfElement(INPUT);
enterCharSequence(INPUT, "someData");
waitForJSandJQueryToLoad(30);//30 seconds
final By LIST_ITEM = By.cssSelector(".select2-drop-active ul.select2-results li.select2-result-selectable");
click(LIST_ITEM);

仅供参考,其中一些元素没有唯一的I,因此我使用css选择器来定位它们。

这段代码可以工作,但有时会抛出StaleElementReferenceException。这是错误:

代码语言:javascript
复制
org.openqa.selenium.StaleElementReferenceException: Element not found in the cache - perhaps the page has changed since it was looked up
For documentation on this error, please visit: http://seleniumhq.org/exceptions/stale_element_reference.html

Selenium版本: 2.53

所以,我想知道是否有任何方法可以避免这种情况。我读了一些关于它的帖子,但它们没有太大帮助。

如果你需要更多信息,请告诉我。任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

发布于 2021-04-18 14:47:33

'StaleElementReferenceException‘表示元素已更改。它在另一个div中,另一个跨度或其属性已更改。Selenium可能会找到它,但在您尝试单击它的那一秒,它就改变了。

您需要再次搜索相同的元素,并等待它变为clickAble或可见。例如:

代码语言:javascript
复制
WebDriverWait wait = new WebDriverWait(driver, 20);          
WebElement button = 
wait.until(ExpectedConditions.
elementToBeClickable(By.id("btnLogin")));
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67141965

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档