2015-11-09 5 views
1

Я пытаюсь найти кнопку (Preview/Edit) на веб-странице, используя этот код, где он нажмет кнопку в соответствии с текстом аргумента (buttonName).Поиск скрытого/отключенного элемента с помощью Xpath

Страница ведет себя (когда страница загружается, она показывает кнопку «изменить»). При нажатии кнопки редактирования, то он показывает кнопку 'Предварительный просмотр' и наоборот}

WebBrowserElement parentElement = waitForElement(By.xpath("//div[@class='serviceHeaderInner']")); 
String s = parentElement.toString(); 
if (s.contains(buttonName) && (parentElement.waitForElement(By.xpath(".//a[.='" + buttonName + "']"))).isDisplayed()) { 
    WebBrowserElement buttonElement = parentElement.waitForElement(By.xpath(".//a[.='" + buttonName + "']")); 
    buttonElement.click(); 
} else { 
    debugPrintln("  -> Invalid buttonName '"+ buttonName +"'"); 
} 

В тестовом случае я пытаюсь передать,

'Предварительный просмотр'

'Preview'

'Edit'

'Edit'

Как при загрузке страницы, будет Кнопка «Редактировать» и передавая два аргумента «Предварительный просмотр» в тестовом примере .. он переходит непосредственно в другое и т. Д. Более того, передавая аргумент «Редактировать», он также переходит в часть else. Я думаю, что что-то не так с условием «если». Но чтобы сделать более динамичным «Он должен проверить класс, который содержит„инвалид“текст согл к снимкам, так что эта проблема может быть предотвращена в первой точке

снимков:.. 1 и 2

ответ

0

Что присваивается значение с, когда вы приводите parentElement натянуть? Вместо того, чтобы делать

.toString();

Я думаю, что вам нужно будет сделать

.getAttribute("value"); или .getAttribute("text");. или просто .text;

Мы можем чан ge это, если утверждение немного поработает правильно. Отображаются ли эти кнопки при загрузке страницы или есть период ожидания?

Возможно, мы сможем попробовать это, не будем использовать родительский элемент, поскольку он, кажется, здесь не нужен. Это может быть переработан немного больше, но давайте попробуем первый:

if (findElement(By.xpath("//a[text()='" + buttonName + "']"))).isDisplayed()) { 
    WebBrowserElement buttonElement = findElement(By.xpath("//a[text()='" + buttonName + "']")); 
    buttonElement.click(); 
} else { 
    debugPrintln("  -> Invalid buttonName '"+ buttonName +"'"); 
} 
+0

Я отредактировал вопрос, надеюсь, что это поможет. Благодарю. – Prago

+0

Это имеет смысл. Где указано название кнопки? В этом случае, похоже, s никогда не будет содержать имя кнопки, потому что оно просто указывает на элемент div и не заботится о том, что находится под ним. –

+0

Я пытаюсь установить условие в том, блокирует ли parentElement некоторый текст и пытается преобразовать в строку и найти, содержит ли он текст при передаче имени buttonName. В дополнение к этому, пытаясь определить, отображается ли эта кнопка или нет. Имя кнопки объявляется внутри блока if. – Prago

0

Вы можете использовать метод ниже, чтобы нажать на кнопку на основе имени. Используйте try{} catch(){} для этого метода, чтобы обрабатывать регистр, если кнопка отсутствует.

// button names can be one of [Edit, Preview] 
// Provided you have only one button each on the name of Edit and Preview on your page 
public void clickButtonBasedOnName(String buttonName) { 
    waitForElement(By.linkText(buttonName)).click(); 
} 
Смежные вопросы