sendKeys 无法在带有 area-label 的文本区域上工作并获取元素不可交互异常
sendKeys not working on textarea with area-label and getting element not interactable exception
首先为如此糟糕的标题道歉,请提出一个好的标题。
以下是我面临的问题的详细信息:
网站:
https://www.desmos.com/calculator/lzidy3m70r
步骤:
- 点击左上角的+按钮
- Select 图片并上传任何图片
- 更新字段中心、宽度和高度的值
问题:无法与中心、宽度和高度的任何文本区域交互。继续获取可交互异常的元素
这是html
如您所见,宽度字段没有输入标签,只有 2 个 span 分别显示 15,textarea 也不可交互
这是我用来识别 textarea 或 span 的 xpath:
//textarea[contains(@class,'dcg-smart-textarea') and text()='"+imageName+"']/parent::div/parent::div/following-sibling::div//span[@class='dcg-mq-textarea']/textarea
//textarea[contains(@class,'dcg-smart-textarea')]/parent::div/parent::div/following-sibling::div//span[@class='dcg-mq-root-block dcg-mq-editing-overflow-right']/span
我尝试了很多方法,比如先点击 div,一旦光标可用,然后尝试输入或先点击,然后清除,然后输入,但点击成功后下一步失败,显示异常元素不可交互。
我在想 javascriptexecutor 需要以某种方式处理这种情况,但我不太了解 javascript 以及处理此类字段的方法。
有人可以帮我解决这个问题并成功输入中心、宽度和高度字段的值吗?
对于这种情况,您不需要 JavaScript 执行者。
使用下面的 xpath
//div[text()='Center:']//following-sibling::div
您可以找到与中心、宽度和高度的 div 字段相关的所有 Web 元素。
现在定位我正在使用 xpath 索引的第一个元素:
(//div[text()='Center:']//following-sibling::div)[1]
这将针对第一个中心区域。
此外,我们将必须清除 div 中已经存在的默认值,因为我们有循环。
代码:
driver.manage().window().maximize();
WebDriverWait wait = new WebDriverWait(driver, 30);
//driver.manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS);
driver.get("https://www.desmos.com/calculator/lzidy3m70r");
Actions action = new Actions(driver);
WebElement centerWebElement = wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("(//div[text()='Center:']//following-sibling::div)[1]")));
centerWebElement.click();
for (int i = 0; i<=10 ; i++) {
action.moveToElement(centerWebElement).sendKeys(Keys.BACK_SPACE).build().perform();
Thread.sleep(100);
System.out.println("Clicked on delete for "+ i + " time");
}
new Actions(driver).moveToElement(centerWebElement).pause(2).sendKeys("2021, 2021").build().perform();
同理,第一个宽度
(//div[text()='Center:']//following-sibling::div)[3]
和第一个高度
(//div[text()='Center:']//following-sibling::div)[7]
应该可以帮助您解决问题。
首先为如此糟糕的标题道歉,请提出一个好的标题。
以下是我面临的问题的详细信息:
网站:
https://www.desmos.com/calculator/lzidy3m70r
步骤:
- 点击左上角的+按钮
- Select 图片并上传任何图片
- 更新字段中心、宽度和高度的值
问题:无法与中心、宽度和高度的任何文本区域交互。继续获取可交互异常的元素
这是html
如您所见,宽度字段没有输入标签,只有 2 个 span 分别显示 15,textarea 也不可交互
这是我用来识别 textarea 或 span 的 xpath:
//textarea[contains(@class,'dcg-smart-textarea') and text()='"+imageName+"']/parent::div/parent::div/following-sibling::div//span[@class='dcg-mq-textarea']/textarea
//textarea[contains(@class,'dcg-smart-textarea')]/parent::div/parent::div/following-sibling::div//span[@class='dcg-mq-root-block dcg-mq-editing-overflow-right']/span
我尝试了很多方法,比如先点击 div,一旦光标可用,然后尝试输入或先点击,然后清除,然后输入,但点击成功后下一步失败,显示异常元素不可交互。
我在想 javascriptexecutor 需要以某种方式处理这种情况,但我不太了解 javascript 以及处理此类字段的方法。
有人可以帮我解决这个问题并成功输入中心、宽度和高度字段的值吗?
对于这种情况,您不需要 JavaScript 执行者。
使用下面的 xpath
//div[text()='Center:']//following-sibling::div
您可以找到与中心、宽度和高度的 div 字段相关的所有 Web 元素。
现在定位我正在使用 xpath 索引的第一个元素:
(//div[text()='Center:']//following-sibling::div)[1]
这将针对第一个中心区域。
此外,我们将必须清除 div 中已经存在的默认值,因为我们有循环。
代码:
driver.manage().window().maximize();
WebDriverWait wait = new WebDriverWait(driver, 30);
//driver.manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS);
driver.get("https://www.desmos.com/calculator/lzidy3m70r");
Actions action = new Actions(driver);
WebElement centerWebElement = wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("(//div[text()='Center:']//following-sibling::div)[1]")));
centerWebElement.click();
for (int i = 0; i<=10 ; i++) {
action.moveToElement(centerWebElement).sendKeys(Keys.BACK_SPACE).build().perform();
Thread.sleep(100);
System.out.println("Clicked on delete for "+ i + " time");
}
new Actions(driver).moveToElement(centerWebElement).pause(2).sendKeys("2021, 2021").build().perform();
同理,第一个宽度
(//div[text()='Center:']//following-sibling::div)[3]
和第一个高度
(//div[text()='Center:']//following-sibling::div)[7]
应该可以帮助您解决问题。