为什么没有Selenium取名元素

时间:2014-10-07 11:44:17

标签: java selenium testng

我有一个我想要选择的下拉菜单。但我得到的问题是测试+ selenium不会取名,并给出一个我找不到它的错误。

这是下拉框

的部分

我坚持使用的HTMl页面,是“kiesMaatregelPanel:maatregel

的选择
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<body>
<div id="banner">
<div id="titel">
<div id="id7" style="text-align: right">
</div>
<div id="bannerStart"> </div>
<div id="id9"> </div>
<div id="ida"> </div>
<div id="inhoud">
<div id="content">
<div id="idb">
<br>
<h1>Kies rol</h1>
<div id="idc" style="display:none"> </div>
<div id="idd" style="display:none"> </div>
<div id="ide" style="display:none"> </div>
<form id="idf" action="?wicket:interface=:1:contentPanel:form::IFormSubmitListener::" method="post">
<div style="width:0px;height:0px;position:absolute;left:-100px;top:-100px;overflow:hidden">
<table class="filterbox" cellspacing="1">
<tbody>
<tr>
<tr id="id13">
<td class="filterboxCol1">
<td class="filterboxCol2">
<select name="kiesMaatregelPanel:maatregel">
</td>
<td class="filterboxCol1"> </td>
<td class="filterboxCol2"> </td>
</tr>
</tbody>
</table>
<input id="id11" class="defaultButton" type="submit" onclick="var wcall=wicketSubmitFormById('idf', '?wicket:interface=:1:contentPanel:form:kiesRolButton::IActivePageBehaviorListener:0:-1&wicket:ignoreIfNotActive=true', 'kiesRolButton' ,function() { }.bind(this),function() { }.bind(this), function() {return Wicket.$$(this)&&Wicket.$$('idf')}.bind(this));;; return false;" value="Kies" name="kiesRolButton">
</form>
</div>
</div>
</div>
<div id="id12"> </div>
<script type="text/javascript">
</body>
</html>

4 个答案:

答案 0 :(得分:1)

在Python中,解决方案将如下所示:

driver.find_element_by_class_name("filterboxCol2").click()
Select(driver.find_element_by_class_name("filterboxCol2")).select_by_visible_text("Maatwerk")
driver.find_element_by_css_selector("option[value=\"1\"]").click()

您可以尝试使用&#34;类名&#34;而不是&#34;名称&#34;并看看它是否会通过。 我没有Java中的Selenium,但是等效应该与此类似(使用&#34; name&#34; type):

driver.findElement(By.name("kiesMaatregelPanel:maatregel")).click();
new Select(driver.findElement(By.name("kiesMaatregelPanel:maatregel")))
    .selectByVisibleText("Maatwerk");
driver.findElement(By.cssSelector("option[value=\"1\"]")).click();

答案 1 :(得分:0)

你必须点击两次

driver.findElement(By.name( “kiesMaatregelPanel:maatregel”))点击(); driver.findElement(By.cssSelector( “XXXXX”))点击();

答案 2 :(得分:0)

名称出现问题,我认为: 但是我找到了一条带有xpath的代码,我可以使用它,并找到正确的选择

select = new Select(driver.findElement(By.xpath("//table[@class='filterbox']/tbody/tr[2]/td[@class='filterboxCol2']/select")));
    select.selectByVisibleText(maatregel);

答案 3 :(得分:-1)

我已经解决了这个问题。使用xPath

示例:

<div class = "example">

  <table class="tableclass">
     <tbody class="tbodyclass">
       <tr class="tr1">
         <td class="td11">
         <select class = "selectclass">
         <option>java</option>
         <option>c#</option>
         </select>
         </td>

         <td class="td12">
         <select class = "selectclass">
         <option>jworld</option>
         <option>c#world</option>
         </select>
         </td>
         </tr>

      <tr class="tr2">
         <td class="td21">
         <select class = "selectclass">
         <option>Andorid</option>
         <option>Windows</option>
         </select>
         </td>

         <td class="td22">
         <select class = "selectclass">
         <option>great</option>
         <option>Nice</option>
         </select>
         </td>
         </tr>

       </tbody>
      </table>
     </div>

如果您想从下拉列表中选择Java,则必须使用

  

公共类TestingExample {

     

私人WebDriver驱动程序;私有WebElement元素;私人的   列出元素;

     

@BeforeClass     public void openBrowser(){

     

driver = new FirefoxDriver();

     

}

     

@Test     public void testMethod(){

     

driver.get(&#34;传递您的网站链接&#34;);了Thread.sleep(3000); //毫秒

     

元素=驱动程序。              findElement(By.xpath(&#34; // DIV [@class =&#39;例如&#39;] /表/ tbody的/ TR [1] / TD [1] /选择&#34));

     

的Thread.sleep(3000);选择select = new选择(元素);分子   = select.getOptions(); //该选择标记中的选项数(WebElement myelement:elements){//迭代相同的

      System.out.println(myelement.getText());            Thread.sleep(2000);
      if (myelement.getText().equalsIgnoreCase("java")) {
          Thread.sleep(2000);
          myelement.click();
          break;          }       }       Thread.sleep(5000); } }
     

关键是    1.)&#34; // div [@class =&#39; element&#39;]应该是父级,可以更改为// * [@ class&#39; element&#39;],这意味着任何将类名作为元素的标记。&#34;

2。)为什么tr [1] =因为我想从属于第一行的select标签中选择一个选项。     如果您想选择Android,那么

  

@Test public void testMethod(){

     

driver.get(&#34;传递您的网站链接&#34;);了Thread.sleep(3000); //毫秒   元素=驱动程序。              findElement(By.xpath(&#34; // DIV [@class =&#39;例如&#39;] /表/ tbody的/ TR [2] / TD [1] /选择&#34));   选择select = new选择(元素); elements = select.getOptions();   //该选择标记中的选项数(WebElement myelement:   elements){//迭代相同的

      System.out.println(myelement.getText());            Thread.sleep(2000);
      if (myelement.getText().equalsIgnoreCase("Andorid")) {
          Thread.sleep(2000);
          myelement.click();
          break;          }       }       Thread.sleep(5000); }
     

将tr [1]更改为tr [2]以选择android

3。)为什么td [1]导致javaandorid在td [1]中为各自的tr。如果您想选择jworld选项,那么

  

@Test public void testMethod(){

     

driver.get(&#34;传递您的网站链接&#34;);了Thread.sleep(3000); //毫秒   元素=驱动程序。              findElement(By.xpath(&#34; // DIV [@class =&#39;例如&#39;] /表/ tbody的/ TR [1] / TD [2] /选择&#34));

     

选择select = new选择(元素); elements = select.getOptions();   //该选择标记中的选项数(WebElement myelement:   elements){//迭代相同的

      System.out.println(myelement.getText());            Thread.sleep(2000);
      if (myelement.getText().equalsIgnoreCase("jworld")) {
          Thread.sleep(2000);
          myelement.click();
          break;          }       }       Thread.sleep(5000); }

试试这个它会起作用。

所有方法都试图为其找到父母,然后继续前往孩子 使用上面示例中给出的xpath