从相关的下拉框中选择一个选项Selenium Web驱动程序

用户名

我的应用程序必须在IE中使用。我正在自动化测试,其中脚本首先必须在第一个下拉框“ Category”中选择一个选项,以使在第二个下拉框“ Name”中显示与类别相关的选项。然后,脚本在“名称”中选择一个选项,然后将显示一个关联的页面。
在“类别”中进行选择之前,“名称”没有任何选项。HTML来源:

<select id="drop_Category">
   <option value =""/>
   <option value = "Category1">
     Text - Category1
   <option value = "Category2">
     Text - Category2
<select id="drop_Name">

选择选项“ Category1”后,HTML源更改为:

<select id="drop_Category">
   <option value =""/>
   <option value = "Category1">
     Text - Category1
   <option value = "Category2">
     Text - Category2
<select id="drop_Name">
   <option value =""/>
   <option value = "C1_Name1">
     Text - C1_Name1
   <option value = "C1_Name2">
     Text - C1_Name2
   <option value = "C1_Name3">
     Text - C1_Name3

对于要选择“ Category1”和“ C1_Name3”的脚本,我的第一个代码版本是:

//Select option in drop-box "Category"
stringText = "Category1";
var dropCategory = new SelectElement(driver.FindElement(By.Id("drop_Category")));
dropCategory.SelectByText(stringText);

//Select option in drop-box "Name"
stringText = "C1_Name3";
var dropName = new SelectElement(driver.FindElement(By.Id("drop_Name")));
dropName.SelectByText(stringText);

此代码不起作用,因为尚未加载“名称”中的列表,并且脚本无法找到带有文本“ C1_Name3”的选项,因此我添加了隐式等待。等待没有帮助,所以我尝试捕获异常。这是第二版代码:

//Select option in drop-box "Category"
stringText = "Category1";
var dropCategory = new SelectElement(driver.FindElement(By.Id("drop_Category")));
dropCategory.SelectByText(stringText);

//Select option in drop-box "Name"
stringText = "C1_Name3"
try
{
   var dropName = new SelectElement(driver.FindElement(By.Id("drop_Name")));
   dropName.SelectByText(stringText);   
}
catch (NoSuchElementException)
{
   var dropName = new SelectElement(driver.FindElement(By.Id("drop_Name")));
   dropName.SelectByText(stringText);   
}

它有效,但有时由于InvalidSelectorException或StaleElementReferenceException异常而崩溃。我不知道该怎么做才能使这项工作始终如一。另外,我是该领域的新手,所以我不确定是否像在第二版中那样编写代码是不好的做法。任何帮助,我们将不胜感激。

威仕

初始方法

通常(根据我的经验),除了等待时间方法外,还需要睡眠时间。因此,请尝试将两者结合。

例如,我尝试循环直到找到想要的元素。伪代码如下:

boolean found = false;
while (!found) {
try
{
   var dropName = new SelectElement(driver.FindElement(By.Id("drop_Name")));
   dropName.SelectByText(stringText);
   found = true;  
}
catch (NoSuchElementException)
{
   var dropName = new SelectElement(driver.FindElement(By.Id("drop_Name")));
   dropName.SelectByText(stringText); 
   //do a short sleep here e.g. 500ms depending on the speed of your site  
}

}

InvalidSelectorException文档中,当“用于查找元素的选择器未返回WebElement”时,也会引发该异常。因此,捕获NoSuchElementException应该足够了。

替代方法

  • 从您的问题<select id="drop_Name">开始就存在于代码中。
  • 因此,driver.findElement始终通过ID查找一个WebElementdrop_Name
  • 区别在于,直到您选择Category1drop_Name都没有<option>值。
  • 因此,您可以尝试以下等待功能:

(注意:代码使用Java;可以轻松移植到C#)

private static void waitUntilOptionsLoad() {
    while(true) {
        Thread.sleep(1000);
        List<WebElement> options = driver.findElement(By.id("drop_Name"))
                        .findElements(By.tagName("option"));
        if (options.size() > 0 ) { 
            System.out.println("More than one option tag found; therefore options have loaded");
            break;
        }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用Selenium 2 / Web驱动程序javascript API从选择下拉列表中选择一个选项?

来自分类Dev

IllegalLocatorException-Selenium Web驱动程序

来自分类Dev

Selenium:循环Web驱动程序(Python)

来自分类Dev

Selenium Web驱动程序单击按钮

来自分类Dev

Selenium Web 驱动程序:NoSuchElementError

来自分类Dev

Python Selenium Web驱动程序:从下拉列表中选择值(无此类元素异常)

来自分类Dev

Selenium Web驱动程序moveToElement(Actions)用木偶驱动程序引发错误?

来自分类Dev

Selenium Web 驱动程序中的 Puppeteer slowMo 选项?

来自分类常见问题

更改Selenium Web驱动程序的用户代理

来自分类Dev

高效使用Selenium滚动Web驱动程序

来自分类Dev

Selenium Web驱动程序填充字段保存输出

来自分类Dev

使用Selenium Web驱动程序的naukri注册页面

来自分类Dev

selenium Web驱动程序不返回Wikipedia表

来自分类Dev

无法使用Selenium Web驱动程序上传文件

来自分类Dev

在Selenium Web驱动程序中从XML解析值

来自分类Dev

xpath的双斜杠。Selenium Java Web驱动程序

来自分类Dev

如何使用Selenium Web驱动程序单击导航栏

来自分类Dev

C#中的Selenium Web驱动程序消息验证

来自分类Dev

Selenium Web驱动程序:如何单击图像按钮?

来自分类Dev

Selenium Web驱动程序-无法找到元素

来自分类Dev

对象实例化-Selenium Web驱动程序

来自分类Dev

如何在Selenium Web驱动程序中登录

来自分类Dev

C#Selenium Web驱动程序和CSS:起点

来自分类Dev

Selenium Web 驱动程序 Firefox 打开空白页

来自分类Dev

Selenium Web 驱动程序 | 查找对象 | Python

来自分类Dev

通过 Google 使用 Selenium Web 驱动程序单击链接

来自分类Dev

Selenium Web 驱动程序陈旧引用异常

来自分类Dev

无法运行 3.8.1 版本的 selenium Web 驱动程序项目

来自分类Dev

下拉框取决于在另一个下拉框中选择的选项

Related 相关文章

  1. 1

    如何使用Selenium 2 / Web驱动程序javascript API从选择下拉列表中选择一个选项?

  2. 2

    IllegalLocatorException-Selenium Web驱动程序

  3. 3

    Selenium:循环Web驱动程序(Python)

  4. 4

    Selenium Web驱动程序单击按钮

  5. 5

    Selenium Web 驱动程序:NoSuchElementError

  6. 6

    Python Selenium Web驱动程序:从下拉列表中选择值(无此类元素异常)

  7. 7

    Selenium Web驱动程序moveToElement(Actions)用木偶驱动程序引发错误?

  8. 8

    Selenium Web 驱动程序中的 Puppeteer slowMo 选项?

  9. 9

    更改Selenium Web驱动程序的用户代理

  10. 10

    高效使用Selenium滚动Web驱动程序

  11. 11

    Selenium Web驱动程序填充字段保存输出

  12. 12

    使用Selenium Web驱动程序的naukri注册页面

  13. 13

    selenium Web驱动程序不返回Wikipedia表

  14. 14

    无法使用Selenium Web驱动程序上传文件

  15. 15

    在Selenium Web驱动程序中从XML解析值

  16. 16

    xpath的双斜杠。Selenium Java Web驱动程序

  17. 17

    如何使用Selenium Web驱动程序单击导航栏

  18. 18

    C#中的Selenium Web驱动程序消息验证

  19. 19

    Selenium Web驱动程序:如何单击图像按钮?

  20. 20

    Selenium Web驱动程序-无法找到元素

  21. 21

    对象实例化-Selenium Web驱动程序

  22. 22

    如何在Selenium Web驱动程序中登录

  23. 23

    C#Selenium Web驱动程序和CSS:起点

  24. 24

    Selenium Web 驱动程序 Firefox 打开空白页

  25. 25

    Selenium Web 驱动程序 | 查找对象 | Python

  26. 26

    通过 Google 使用 Selenium Web 驱动程序单击链接

  27. 27

    Selenium Web 驱动程序陈旧引用异常

  28. 28

    无法运行 3.8.1 版本的 selenium Web 驱动程序项目

  29. 29

    下拉框取决于在另一个下拉框中选择的选项

热门标签

归档