2015-06-07 4 views
1

Я хочу добавить в поле дополнительный текст поле в этом website текстовую строку.Установите флажок и добавьте текст

Мой метод Селен выглядит следующим образом:

public void addSecondaryText(String string) { 
    //click secondary button 
    WebElement secButton = driver.findElement(By.xpath("//label/input[@id='sub-text-check']")); 
    if (secButton.isDisplayed()) { 
     secButton.click();   
    } 
    //clear text 
    WebElement secTextField = driver.findElement(By.xpath("//*[@id='sub-text']")); 
    secTextField.clear(); // I get the exception here! 
    //add text 
    secTextField.sendKeys(string); 
} 

Однако, я в настоящее время получаю исключение для secTextField.clear();, что нельзя манипулировать:

Exception in thread "main" org.openqa.selenium.InvalidElementStateException: invalid element state: Element is not currently interactable and may not be manipulated 

Любые предложения, что я делаю не так?

Я ценю ваши ответы!

+0

Вы пробовали добавлять ожидания перед отправкой ясно? –

+0

@VikasNehaOjha Просто ждал 'Thread.sleep (5000);', однако, я все равно получаю тот же результат, что и выше. – mrquad

+0

Сначала вам нужно сделать работу secButton.click(). Удалите его из условия if, потому что он будет отображаться. После того, как вы начнете работать, secTextField.clear() также должен работать. –

ответ

1

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

//List will help of to determine the "Add secondary text" button needs to be clicked on not 
//if the count is greater than 0 then click it 
IList<IWebElement> elements = driver.FindElements(By.XPath("//span[contains(text(),'Add secondary text')]")); 
if (elements.Count>0) 
{ 
    elements.FirstOrDefault().Click(); 
} 
IWebElement element = driver.FindElement(By.Id("sub-text")); 
element.Clear(); 
element.SendKeys("Test"); 

enter image description here

+0

Он может найти правильный элемент, но не способен его манипулировать. Потому что он не может нажать кнопку, которая отображает это целевое поле. –

+0

@VikasNehaOjha Исправить. Но он нацелился на неправильный элемент. И я написал селектор таким образом, чтобы он быстро проверил, включен ли элемент или нет. – Saifur

+0

Элемент, на который он нацеливается, является правильным. Но он скрыт и становится видимым только при нажатии другой кнопки, которую он не нажимает. –

0

Следующий код работает -

public void addSecondaryText(String string) { 
    //click secondary button 
    WebElement secButton = driver.findElement(By.xpath("//span[@class='sub-text-toggle']")); 
    secButton.click(); 

    //clear text 
    WebElement secTextField = driver.findElement(By.xpath("//*[@id='sub-text']")); 
    secTextField.clear(); // I get the exception here! 
    //add text 
    secTextField.sendKeys(string); 
} 
Смежные вопросы