量角器 - 检查单选按钮是否被选中
Protractor - Check if a radio-button is checked or not
所以我遇到了这个问题,我 运行 进行了 protractor/selenium 测试,有时在测试期间已经检查了一个单选按钮,有时却没有。
等等:
<div id="TRUCK" class="radio-item checked" data-gtm="truck">
或
<div id="TRUCK" class="radio-item" data-gtm="deliveryOpt-truck">
在哪里你可以看到 class 有时有 "checked" init 有时没有。
我想要解决的是,我想制作一个功能,如果单选按钮未被选中,并且如果它已经被选中,那么我们就继续。
我设法做到的是:
it('Clicking Truck button', function (done) {
browser.driver
.then(() => browser.wait(EC.presenceOf(element(by.id("TRUCK")))), 30000, "Timed out button")
.then(() => browser.executeScript("arguments[0].click();",element(by.id("TRUCK")).getWebElement()))
.then(() => done());
但是问题是,如果单选按钮已经被选中,它将取消选中它,这是不好的。又是这样。
我正在尝试制作一个可以点击的功能。如果未选中单选按钮,则单击。如果它已经被选中,那么我们继续。
我怎样才能做到这一点?
看来你很接近。要在 class 属性不包含值 checked 时识别元素,您可以使用以下任一方法 :
xpath:
//div[@id='TRUCK' and not(contains(@class,'checked'))]
css:
div#TRUCK:not(.checked)
实际上,如果您的用例是在 class 属性没有值 checked[= 时调用 click()
49=],而不是 presenceOf()
,您需要使用 ExpectedConditions elementToBeClickable()
,您可以使用以下任一 Locator Strategies:
-
it('Clicking Truck button', function (done) {
browser.driver
.then(() => browser.wait(EC.elementToBeClickable(element(by.xpath("//div[@id='TRUCK' and not(contains(@class,'checked'))]")))), 30000, "Timed out button")
css:
it('Clicking Truck button', function (done) {
browser.driver
.then(() => browser.wait(EC.elementToBeClickable(element(by.css("div#TRUCK:not(.checked)")))), 30000, "Timed out button")
这将检查复选框是否 selected,如果没有,select 它:
static async selectCheckbox(element: ElementFinder, markChecked: boolean) {
const isSelected = await elementt.isSelected();
if (isSelected !== markChecked) {
await elementt.click();
}
return;
}
所以我遇到了这个问题,我 运行 进行了 protractor/selenium 测试,有时在测试期间已经检查了一个单选按钮,有时却没有。
等等:
<div id="TRUCK" class="radio-item checked" data-gtm="truck">
或
<div id="TRUCK" class="radio-item" data-gtm="deliveryOpt-truck">
在哪里你可以看到 class 有时有 "checked" init 有时没有。
我想要解决的是,我想制作一个功能,如果单选按钮未被选中,并且如果它已经被选中,那么我们就继续。
我设法做到的是:
it('Clicking Truck button', function (done) {
browser.driver
.then(() => browser.wait(EC.presenceOf(element(by.id("TRUCK")))), 30000, "Timed out button")
.then(() => browser.executeScript("arguments[0].click();",element(by.id("TRUCK")).getWebElement()))
.then(() => done());
但是问题是,如果单选按钮已经被选中,它将取消选中它,这是不好的。又是这样。
我正在尝试制作一个可以点击的功能。如果未选中单选按钮,则单击。如果它已经被选中,那么我们继续。
我怎样才能做到这一点?
看来你很接近。要在 class 属性不包含值 checked 时识别元素,您可以使用以下任一方法
xpath:
//div[@id='TRUCK' and not(contains(@class,'checked'))]
css:
div#TRUCK:not(.checked)
实际上,如果您的用例是在 class 属性没有值 checked[= 时调用 click()
49=],而不是 presenceOf()
,您需要使用 ExpectedConditions elementToBeClickable()
,您可以使用以下任一 Locator Strategies:
-
it('Clicking Truck button', function (done) { browser.driver .then(() => browser.wait(EC.elementToBeClickable(element(by.xpath("//div[@id='TRUCK' and not(contains(@class,'checked'))]")))), 30000, "Timed out button")
css:
it('Clicking Truck button', function (done) { browser.driver .then(() => browser.wait(EC.elementToBeClickable(element(by.css("div#TRUCK:not(.checked)")))), 30000, "Timed out button")
这将检查复选框是否 selected,如果没有,select 它:
static async selectCheckbox(element: ElementFinder, markChecked: boolean) {
const isSelected = await elementt.isSelected();
if (isSelected !== markChecked) {
await elementt.click();
}
return;
}