当我使用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();
可以点击并选择屏幕上的类似标签。我搜索了关于这个主题的问题和答案,但我无法找到解决方案。我添加了代码和前端屏幕截图。
答案 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();
}
}
注意:的 如果您使用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()
浏览器快照: