Selenium - 单击标签(它会稍微改变颜色),然后标签将恢复为未被点亮的状态

时间:2018-04-26 12:30:48

标签: java selenium selenium-webdriver xpath css-selectors

Screenshot

当我使用XPath或CSS方法单击按钮时,按钮会突出显示片刻。然后它会更改回默认颜色,就像未选择该选项一样。自动化完成后,我收到一个用户错误,指出未选择按钮选项。

我正在使用最新的Chrome驱动程序编写Java代码。我也试过Firefoxdriver。我已尝试过明确的等待和Thread.sleep,但没有任何效果。 这是代码 - Insurance Cover Type Label

driver.findElement(By.xpath("//*[@id=\'content\']/div[4]/div/div[2]/div[14]/div[2]/ul/li[2]/label")).click();

可以点击并选择屏幕上的类似标签。我搜索了关于这个主题的问题和答案,但我无法找到解决方案。我添加了代码和前端屏幕截图。

5 个答案:

答案 0 :(得分:0)

您的代码似乎是在标签上点击,而不是在按钮上。即使标签位于按钮内,也可以在其冒泡和取消时捕获该事件。我会尝试准确选择您想要处理事件的对象。

答案 1 :(得分:0)

通过查看屏幕截图Insurance Cover Type Label,您希望与之互动的button元素似乎位于<lable>标记内。因此,当您点击该按钮时,它基本上是点击<label>而不是<button>。你能否通过扩展标签来提供dom的截图。

您的定位器应该像

By.xpath("//*[@id=\'content\']/div[4]/div/div[2]/div[14]/div[2]/ul/li[2]/label/button");

您只需要在xpath中包含引用label内的按钮元素的元素。

答案 2 :(得分:0)

使用此代码(此xpath://label[contains(text(), 'Comprehensive')]):

public class Sof {

    /**
     * Specific logger
     */
    private static final Logger logger = LoggerFactory.getLogger(Sof.class);

    public static void main(String[] args) throws Exception {

        final OperatingSystem currentOperatingSystem = OperatingSystem.getCurrentOperatingSystem();
        String pathWebdriver = String.format("src/test/resources/drivers/%s/googlechrome/%s/chromedriver%s", currentOperatingSystem.getOperatingSystemDir(),
                SystemArchitecture.getCurrentSystemArchitecture().getSystemArchitectureName(), currentOperatingSystem.getSuffixBinary());

        if (!new File(pathWebdriver).setExecutable(true)) {
            logger.error("ERROR when change setExecutable on " + pathWebdriver);
        }

        System.setProperty("webdriver.chrome.driver", pathWebdriver);
        final ChromeOptions chromeOptions = new ChromeOptions();

        WebDriver driver = new ChromeDriver(chromeOptions);
        driver.get("https://services.aviva.ie/direct/product/car.htm?_flowId=motor-flow&_flowExecutionKey=e1s1");
        WebElement element = driver.findElement(By.xpath("//label[contains(text(), 'Comprehensive')]"));
        element.click();
        Thread.sleep(5000);
        driver.quit();
    }

}

enter image description here

注意:如果您使用Java + Selenium进行Web Interface测试,我建议您使用NoraUi开源框架

答案 3 :(得分:0)

问题是您的定位器不正确(某些索引已关闭),至少在我使用$x()在Chrome中进行检查时。

当你可以点击LABEL时,我建议你避免使用长XPath,而是使用包含INPUT的ID,然后引用{{1}兄弟姐妹。我试过了,它对我来说很好。

LABEL

答案 4 :(得分:-1)

根据您的代码尝试,您尝试在click()标记上调用<label>方法,该方法无法接受任何点击。

如果查看 HTML <label>节点有2个子节点,<input>和另一个<label>节点。您可以按如下方式在子click()标记上调用<label>

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC

options = Options()
options.add_argument("start-maximized")
options.add_argument("disable-infobars")
options.add_argument("--disable-extensions")
options.add_argument("--no-sandbox")
driver = webdriver.Chrome(chrome_options=options, executable_path=r'C:\WebDrivers\ChromeDriver\chromedriver_win32\chromedriver.exe')
driver.get('https://services.aviva.ie/direct/product/car.htm?_flowId=motor-flow&_flowExecutionKey=e1s1')
element =  driver.find_element_by_xpath("//input[@class='radio coverType' and @name='itemInsured.coverSelected' and @value='0101']")
driver.execute_script("return arguments[0].scrollIntoView(true);", element)
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//label[@for='itemInsured.coverSelected1']"))).click()

浏览器快照:

Comprehensive