当框架没有 id 和标题时,如何识别并切换到 Selenium 网络驱动程序中的框架
本文关键字:框架 网络 驱动程序 识别 Selenium id 标题 何识别 | 更新日期: 2023-09-27 18:33:52
谁能告诉我如何识别并切换到没有标题和ID的iframe。我需要进入这个框架才能在这个框架中找到另一个元素来发送一些文本。
<div class="sceditor-container" style="width: 1359px; height: 300px;">
<div class="sceditor-toolbar">
<iframe frameborder="0" src="javascript:false" style="width: 1349px; height: 261px;">
<!DOCTYPE html>
<html style="height:100%">
<head>
<meta content="text/html;charset=utf-8" http-equiv="Content-Type">
<link href="" type="text/css" rel="stylesheet">
</head>
<body contenteditable="true" style="height:88%">
<div> </div>
</body>
</html>
</iframe>
为此,我编写了代码:
WebDriver.SwitchTo().Frame(WebDriver.FindElement(By.TagName("iframe")));
WebDriver.FindElement(By.XPath("html/body")).SendKeys("text");
WebDriver.SwitchTo().DefaultContent();
但是 WebDriver 找不到 iframe 元素,因此无法将文本值发送到 iframe 元素。
要单击和发送密钥,请使用以下代码
WebElement loc=driver.findElement(By.XPath("html/body"));
Actions a= new Actions(driver);
a.click(loc).sendKeys("emailBody").perform();
要在 iframe 元素中设置文本,您必须首先从 Body 标签中复制文本
WebElement emailBody = driver.findElement(by.xpath("/html/body"));
emailBody.getText();
将文本复制到电子邮件正文后,您可以将其与框架内的元素一起使用,如下所示
WebDriver.FindElement(By.XPath("html/body")).SendKeys(emailBody);
尝试下面的代码切换到框架,看看会发生什么
driver.switchTo().frame(driver.findElement(By.xpath("//iframe[contains(@src,'javascript:false')]")));
您也可以尝试使用其索引访问框架,尝试
driver.switchTo().frame(0);
我使用ChromeDriver有一段时间了,但最近切换到phantomjs,因为我遇到了ChromeDriver莫名其妙地挂起的问题。 phantomjs(如果我的研究是正确的(几乎完全通过Javascript(这比确凿的事实更像是猜测(注入来工作。 那么,这有什么关系呢? 好吧,我发现您可以针对已加载页面的 DOM 运行自己的 JS。 所以我把你的源代码扔进 https://www.freeformatter.com/xpath-tester.html#ad-output,并试图对它运行一些 xpath,它吐了。 在用正斜杠关闭元和链接标签后,它,然后为开始对添加结束div 标签,然后按预期评估我的 xpath。
你能纠正这些还是这个来源在你之外? 如果可以的话,我会这样做。然后尝试使用
driver.ExecuteScript("Your javascript here..");
将代码放在脚本中以设置div 对象的值。 我手边没有样品,但使用适当的选择器
driver.querySelector("tag.className..").innerHTML = "Your Keys";
在 chrome 中使用控制台时,我仍然遇到问题。 但我强烈怀疑格式错误的HTML是你的罪魁祸首。 如果你已经解决了这个问题,我很想看看答案。 干杯!