Транспортир - Проверьте, установлен ли переключатель или нет - PullRequest
1 голос
/ 12 февраля 2020

Итак, у меня есть проблема, когда я запускаю тест на транспортир / селен, и иногда во время теста уже проверяется переключатель, а иногда нет.

et c:

<div id="TRUCK" class="radio-item checked" data-gtm="truck">

или

<div id="TRUCK" class="radio-item" data-gtm="deliveryOpt-truck">

, где вы можете видеть, что у класса иногда есть "проверенный" 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());

, однако проблема в том, что он отменит его, если уже установлен переключатель, что не очень хорошо. Итак, еще раз.

Я пытаюсь сделать функцию, которая щелкает. Если переключатель не отмечен, мы нажимаем. Если он уже проверен, то мы продолжаем.

Как я могу это сделать?

Ответы [ 2 ]

1 голос
/ 12 февраля 2020

Кажется, вы были близки. Чтобы идентифицировать элемент, когда атрибут class не содержит значения флажок , можно использовать одну из следующих Стратегий локатора :

  • xpath :

    //div[@id='TRUCK' and not(contains(@class,'checked'))]
    
  • css:

    div#TRUCK:not(.checked)
    

Фактически, если ваш вариант использования заключается в вызове click(), когда атрибут class не имеет значения флажок , вместо presenceOf() вам нужно использовать Ожидаемые условия elementToBeClickable(), и вы можете использовать любую из следующих Стратегий локатора :

  • xpath :

    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")
    
0 голосов
/ 12 февраля 2020

Это проверит, если флажок установлен, а если нет, то выберет его:

static async selectCheckbox(element: ElementFinder, markChecked: boolean) {
        const isSelected = await elementt.isSelected();
        if (isSelected !== markChecked) {
            await elementt.click();
        }
        return;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...