【问题标题】:Dropdown selection automation using selenium使用 selenium 的下拉选择自动化
【发布时间】:2013-03-31 19:03:11
【问题描述】:

我需要自动选择 selenium 中的下拉框。下面给出了包含下拉列表的 html 代码。每个组件的 html 代码都是使用 firebug 获取的。

// Input Area

<input type="text" title="Filter by Administrator" readonly="readonly" value="Filter by   Administrator" id="dnn_ctr373_View_BusinessList_admin_dd_Input" class="rcbInput   rcbEmptyMessage" name="dnn$ctr373$View$BusinessList_admin_dd" autocomplete="off">

// Dropdown arrow

<a style="overflow: hidden;display: block;position: relative;outline: none;"   id="dnn_ctr373_View_BusinessList_admin_dd_Arrow">select</a>

// Values inside drop down

<ul class="rcbList" style="list-style:none;margin:0;padding:0;zoom:1;">
<li class="rcbItem ">All</li>
<li class="rcbItem ">dat@nykkos.com</li>
<li class="rcbHovered ">dat1@nykkos.com</li>
</ul>

根据here 的回复,我使用以下代码自动进行下拉选择。

Select select = new Select(driver.findElement(By.xpath("//*[@id=\"dnn_ctr373_View_BusinessList_admin_dd_Input\"]")));
select.deselectAll();
select.selectByVisibleText("All");

代码给了我以下异常:

org.openqa.selenium.support.ui.UnexpectedTagNameException: Element should have been  "select" but was "input"
Build info: version: '2.28.0', revision: '18309', time: '2012-12-11 20:21:18'
System info: os.name: 'Linux', os.arch: 'amd64', os.version: '2.6.35-32-generic',  java.version: '1.6.0_26'
Driver info: driver.version: unknown
at org.openqa.selenium.support.ui.Select.<init>(Select.java:46)
at FilterByAdministrator.testFilterByAdministrator(FilterByAdministrator.java:41)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)

我不确定我上面用于下拉选择的代码是否正确。

谁能告诉我可能的解决方案。

【问题讨论】:

    标签: selenium automated-tests selenium-webdriver


    【解决方案1】:

    上面有区分大小写的修饰

    Driver.Instance.FindElement(By.XPath("//*[text()='select']")).Click();
    Driver.Instance.FindElement(By.XPath("//*[text()='All']")).Click();
    

    【讨论】:

      【解决方案2】:

      试试这个:

      driver.findElement(By.xpath("//*[text()='select']")).click();
      driver.findElement(By.xpath("//*[text()='All']")).click();
      

      它可能会起作用。根据您的 html,它看起来不像选择框。您可以通过正常的点击操作来实现它。

      【讨论】:

      • 以上行带有区分大小写的修饰 Driver.Instance.FindElement(By.XPath("//*[text()='select']")).Click(); Driver.Instance.FindElement(By.XPath("//*[text()='All']")).Click();
      【解决方案3】:

      在 python webdriver 下拉菜单中选择是非常简单的方法。请参阅下面的代码。

      Select(driver.find_element_by_xpath("xpath")).select_by_visible_text(" enter text with you want select")
      

      它应该在 python selenium webdriver 中工作。

      【讨论】:

        【解决方案4】:

        如果您阅读了它所说的错误消息 -

        Element should have been  "select" but was "input"
        

        这表明有问题的网络元素是输入字段类型。 所以不要选择,试着输入/send你的输入,就像这样

        driver.findElement(By.id("dnn_ctr373_View_BusinessList_admin_dd_Input")).sendKeys("All");
        

        【讨论】:

        • 这也不起作用。我在上面的评论中提到的 HemChe 回答中提到的同样的问题
        【解决方案5】:

        用途:

        driver.findElement(By.id("dnn_ctr373_View_BusinessList_admin_dd_Input"));
        

        代替:

        driver.findElement(By.xpath("//*[@id=\"dnn_ctr373_View_BusinessList_admin_dd_Input\"]")));
        

        编辑

        试试下面的代码,让我知道它是否有效。

        WebElement DropDown = driver.findElement(By.id("dnn_ctr373_View_BusinessList_admin_dd_Input"));
        
        Dropdown.sendKeys("All");
        

        【讨论】:

        • 检查我的回答中的编辑,如果您仍然面临同样的问题,请告诉我。
        • 也许Dropdown.click 会更好。然后你必须找到下拉菜单中显示的元素。
        • 现在似乎可以正常工作了。我将在详细检查后进一步发表我的评论并接受答案。感谢您的帮助。
        • 使用给定的代码,虽然异常消失了,但它只是突出显示下拉菜单中的“全部”元素。没有点击下拉项目。此外,虽然我将“All”更改为“dat@nykkos.com”,这是下拉列表中的第二个值,但它仍会继续显示“All”,如帖子中的图像所示。
        • Dropdown.sendKeys("All");之后添加Dropdown.sendKeys(Keys.ENTER);
        猜你喜欢
        • 2022-01-06
        • 1970-01-01
        • 2018-12-12
        • 1970-01-01
        • 1970-01-01
        • 2013-06-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多