【发布时间】:2015-08-29 09:19:42
【问题描述】:
我正在学习 Selenium WebDriver 并在一个公共网站上测试我的技能。问题是我无法使用 Selenium WebDriver + Java 与 role='combobox' 的输入元素进行交互。 我需要为计算器的第一个元素(“Калькулятор”-“Тип расчета” - 此文本附近的组合框)进行交互(选择 2d 选项)。 Firefox 显示了它的代码:
<div class="select2-search">
<label class="select2-offscreen" for="s2id_autogen2_search"></label>
<input id="s2id_autogen2_search" class="select2-input" type="text" aria-autocomplete="list" aria-expanded="true" role="combobox" spellcheck="false" autocapitalize="off" autocorrect="off" autocomplete="off" aria-owns="select2-results-2" placeholder="" aria-activedescendant="select2-result-label-17"></input>
当我尝试为其单击或发送键时,它会写入该元素(选择和选择2)不可见,尽管它是可见的并且可以手动交互。 CSS 没有被转换。我发现 JS 可以更改属性以使元素可见,但我尝试了 - 没有任何改变,isDisplayed() 显示为 false,我无法选择组合框的 2d 项。
这是代码(我只留下了主要部分)):
WebDriver driver = new FirefoxDriver();
driver.get("http://sberbank.ru/ru/person/credits/money/consumer_unsecured");
try{
Thread.sleep(1500);
}catch(Exception e)
{System.out.println("Error in Sleep.");}
List<WebElement> selects = driver.findElements(By.cssSelector(".select2-search"));//(".select2-results"));
List<WebElement> selects2 = driver.findElements(By.xpath("//input[@class='select2-input']"));
System.out.println("xpath: "+selects2.size());
JavascriptExecutor js = (JavascriptExecutor)driver;
js.executeScript("window.scrollTo(0,1000);");
System.out.println("value:"+selects2.get(0).getAttribute("value"));
((JavascriptExecutor) driver).executeScript("arguments[0].style.display='inline';arguments[0].style.visibility='visible';arguments[0].style.height = '20px';arguments[0].style.width = '80px';",selects2.get(0));
System.out.println("visible: "+selects2.get(0).isDisplayed());
System.out.println("enabled: "+selects2.get(0).isEnabled());
System.out.println("height: "+selects2.get(0).getAttribute("height")+",width: "+selects2.get(0).getAttribute("width"));
selects2.get(0).click();
selects2.get(0).sendKeys("По среднемесячному доходу");
它写道: xpath:7 价值: 可见:假 启用:真 高度:0,宽度:0 线程“主”org.openqa.selenium.ElementNotVisibleException 中的异常:元素当前不可见,因此可能无法与之交互
我也尝试使用 JQuery 触发 keyevent,但没有帮助:
((JavascriptExecutor) driver)
.executeScript("var s=window.document.createElement('script');" +
"s.src='D:\\Data\\Selenium\\jquery-1.11.3.min.js';" +
"window.document.head.appendChild(s);");
((JavascriptExecutor)driver).executeScript("arguments[0].focus();var e = jQuery.event.trigger({ type : 'keypress', which : 65 });arguments[0].trigger(e);", selects2.get(0));
它写道“线程“主”org.openqa.selenium.WebDriverException 中的异常:arguments[0].trigger is not a function”
请帮助我修复我的代码,以便能够设置此组合框的 2d 项。
【问题讨论】:
-
我检查了网站,您发布的带有 html 的元素实际上是不可见的。您能说出您尝试与网页上的哪个字段进行交互吗?
-
imageshack.com/a/img913/892/z9croh.png 我正在尝试选择此字段。我需要二维选项“По среднемесячному доходу”。我不知道为什么它不可见,尽管我更改了代码可见性和显示选项 - 请参阅代码。
-
我对网站进行了调查,发现该元素包含在 div 中,且 display='none',我对其进行了修改,现在我可以将密钥发送到输入,但它看起来很奇怪,而不是应该的看起来像:
-
List
selects3 = driver.findElements(By.cssSelector(".select2-drop")); ((JavascriptExecutor) 驱动程序).executeScript("arguments[0].style.display='inline';arguments[0].style.visibility='visible';arguments[0].style.height = '20px';arguments [0].style.width = '80px';",selects3.get(0));选择3.get(0).click(); selects2.get(0).sendKeys("По среднемесячному доходу"); selects2.get(0).sendKeys(Keys.RETURN); -
它在我所用的地方附近的一个框中写了一个文本,但没有任何反应,所以没有使用选择选项。
标签: java javascript jquery css selenium