java 在Mac中的Safari浏览器10上使用Selenium Webdriver无法选择下拉列表

7cwmlq89  于 2023-05-27  发布在  Java
关注(0)|答案(5)|浏览(189)

在Safari浏览器上,我需要从下拉列表中选择一个选项。下面的代码适用于除Mac OS上的Safari之外的所有浏览器。我正在使用Safari 10.1.1和Selenium Web驱动程序版本3.3.1,我用Java编写了代码。参考下面的代码-

webElement = findElement(field);
if (webElement.isDisplayed())
{
  Select select = new Select(webElement);
  select.selectByVisibleText(value);
}
sq1bmfud

sq1bmfud1#

你可以试试这个代码:

public void jsSelect(WebElement element, int index) {
        JavascriptExecutor executor = (JavascriptExecutor) driver;
        executor.executeScript("arguments[0].selectedIndex=" + index + ";", element);
    }

public void jsSelect(WebElement element, String item) {
    JavascriptExecutor executor = (JavascriptExecutor) driver;
    executor.executeScript("const textToFind = '" + item + "';" +
            "const dd = arguments[0];" +
            "dd.selectedIndex = [...dd.options].findIndex (option => option.text === textToFind);", element);
}
bvuwiixz

bvuwiixz2#

你能检查,如果下面的代码在Safari中工作..

WebElement dropdown = driver.findElement(By.xpath("//select[@id='profileItem_10536']"));
Select sel = new Select(dropdown);
sel.selectByVisibleText("Yes");

如果代码在Safari中不起作用,并且在其他浏览器中起作用,请告诉我...

更新:

如果您使用正确的驱动程序(由Apple提供),Sierra上的一切都应该正常工作。你不应该在Safari 10中使用Selenium的SafariDriver。
具体而言:
“旧的SafariDriver实现不再维护,不应使用。”“Safari现在提供对WebDriver API的本机支持。从OS X El Capitan和macOS Sierra上的Safari 10开始,Safari捆绑了一个新的驱动程序实现,由Apple的Web开发人员体验团队维护。”
“Safari的WebDriver支持在默认情况下关闭”
似乎苹果提供了自己的Safari驱动程序,它可以在
“/usr/bin/safaridriver”
请使用此驱动器。有关此方面的更多详细信息,请查看https://webkit.org/blog/6900/webdriver-support-in-safari-10/https://github.com/SeleniumHQ/selenium/issues/3145
希望这对你有帮助。谢谢。

zvms9eto

zvms9eto3#

在Java Selenium 3.141.59上,当使用Safari webdriver支持的默认Select时,也遇到了同样的问题,尝试单击Select web元素,然后单击目标选项......也不起作用,通过使用Javascript选择所需的选项,然后触发相关事件来模拟onchange操作来解决这个问题:

public void selectFromDropDownForSafari(final WebDriver driver, final String selectId, final String expectedOption) {
    WebElement selectElement =  driver.findElement(By.id(selectId)); 
    // Get the option tags under the Select element
    List<WebElement> options = selectElement.findElements(By.tagName("option"));
    if(CollectionUtils.isNotEmpty(options)) {
        for(int index = 0; index < options.size(); index++) {
            WebElement option = options.get(index);
            // Search for an option having the same value attribute OR the displayed text (handling both possibilities)
            if(expectedOption.equals(option.getAttribute("value")) || expectedOption.equals(option.getText())) {
                JavascriptExecutor executor = (JavascriptExecutor) driver;
                // Select the targeted option by index and launch the onchange event
                executor.executeScript("arguments[0].selectedIndex=" + index + "; arguments[0].dispatchEvent(new Event('change'));", selectElement);
                return;
            }
        }
        throw new Exception("No option with the desired value [" + expectedOption + "] was found in the Select element");
    }
    throw new Exception("The Select element does not have any option");
}

在我的例子中,如果不通过javascript(dispatchEvent)发送相应的事件,这将无法正常工作。

von4xj4u

von4xj4u4#

Safari中没有任何下拉选择功能。作为一种变通方法,我在Selenium中使用了element.type(“”),它代替了Select。

eoxn13cs

eoxn13cs5#

选择是不工作的塞拉利昂10,12.6野生动物园11.0我尝试了下面,他们不工作,因为什么都没有发生,没有错误显示.

selectByIndex(3) 
selectByValue("value"), 
selectByVisibleText("Yes");

如果您尝试用途:发送键方法,然后填充选择选项。

相关问题