当前位置: 首页 > 知识库问答 >
问题:

无法使用Selenium WebDriver(Firefox)与输入(角色=组合框)交互

翁钧
2023-03-14

我正在学习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>

当我尝试为它单击或发送键时,它会写入元素(selects和selects2)不可见,尽管它是可见的并且可以手动交互。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("По среднемесячному доходу");

它在线程“main”组织中写入:xpath:7值:可见:false启用:真实高度:0,宽度:0异常。openqa。硒。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));

它写入“线程中的异常”main“org.openqa.selenium.WebDriverException:参数[0]。触发器不是函数

请帮我修复我的代码,以便能够设置此组合框的2d项。

共有1个答案

连鸿
2023-03-14

终于成功了-

driver.get('http://sberbank.ru/ru/person/credits/money/consumer_unsecured')
driver.find_element_by_xpath('//*[@id="s2id_autogen1"]/a').click()
driver.find_element_by_xpath('//ul[@class="select2-results ps-container"]/li[2]').click()
 类似资料:
  • 本文向大家介绍bootstrap输入框组使用方法,包括了bootstrap输入框组使用方法的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了bootstrap输入框组的使用方法,供大家参考,具体内容如下 效果图: 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。

  • 通过在一个文本输入框<input>的任一侧添加文本、按钮以及按钮组,很容易扩展表单控件。 基本示例 把一个附加内容或按钮放在输入框的任一侧。你可以把它们同时放在输入框的两侧。我们不支持在同一侧放多个附加内容,同样也不支持多个表单控件放在一个输入框组中。 <div class="input-group">   <span class="input-group-addon" id="basic-ad

  • 问题内容: 我有一对多关系,这是我的代码 我得到了例外: org.springframework.http.converter.HttpMessageNotWritableException:无法编写内容:无法延迟初始化角色集合:com.example.helios.model.Catalog.items,无法初始化代理- 没有会话;嵌套异常是com.fasterxml.jackson.datab

  • 我有一个实现,其中父组件希望通过使用子组件上可用的< code>@Input参数将某些数据传递给子组件。然而,这种数据传输是可选的,父节点可能会也可能不会按照要求传递它。一个组件中可以有可选的输入参数吗?我在下面描述了一个场景:

  • 在使用Geckodriver时,我正在尝试在我的Angular2站点上运行量角器测试。 我正在使用Selenium独立服务器来运行我的测试,它们在Chrome和IE11中工作,但是当我尝试使用Firefox运行时,我得到以下错误: 如果我尝试使用directConnet运行Firefox测试,我会得到另一个错误: 不知道从这里到哪里去! null

  • 我的HTML代码有一个div标记,其角色为combobox,即。 我试图通过selenium驱动程序和java从组合框中选择一个项目。 我尝试使用"选择"类推荐在这里:如何选择一个下拉值在Selenium WebDriver使用Java 但既然是div,我就错了 msgstr"未预料到的TagNameException:元素应该被选择,但被div" 我认为这是因为div role=“combobo