我有一个我想要选择的下拉菜单。但我得到的问题是测试+ 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>
答案 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]导致java
或andorid
在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
。