【问题标题】:How can I paste url from clipboard to address bar in Chrome with Selenium c#?如何使用 Selenium c# 将剪贴板中的 url 粘贴到 Chrome 中的地址栏?
【发布时间】:2018-11-21 23:47:21
【问题描述】:

我有一个警告框,它在文本输入区域中显示一个 URL,并将链接复制到剪贴板。我希望能够打开一个新选项卡,并将 URL 粘贴到地址栏中。

我试过了:

var generatedLink = System.Windows.Forms.Clipboard.GetText();
_chromeDriver.Navigate().GoToUrl(generatedLink);

生成的链接返回 ""

我也试过了:

尝试 1:

((IJavaScriptExecutor)_chromeDriver).ExecuteScript("window.open();");
List<String> tabs = new List<String>(_chromeDriver.WindowHandles);
_chromeDriver.SwitchTo().Window(tabs[1]);           
_chromeDriver.FindElement(By.XPath("//body")).SendKeys(Keys.Control + "l");
_chromeDriver.FindElement(By.XPath("//body")).SendKeys(Keys.Control + "v");

SendKeys(Keys.Control + "l") 没有选择应有的地址栏

SendKeys(Keys.Control + "v") 不粘贴文本

我知道文本被复制了,因为当我调试测试时,我可以将复制的文本粘贴到记事本中而没有任何问题。

复制发生的地方如下:

const url = window.location.host + urlPattern.stringify(newUrlParameters) + queryString; 
  (navigator as any).clipboard.writeText(url) 
    .then(() => window.prompt('Link copied to clipboard!', url)) 
    .catch(() => window.prompt('Copy to clipboard: Ctrl+C, Enter', url)); 

【问题讨论】:

  • 如果剪贴板上有文本,generatedLink 不应为空。您可以设置断点并验证您的网址是否存在吗?使用它适用于我的第一组代码,我必须包含 url 的“http://”部分。仅使用“www.google.com”我得到一个WebDriverException,在网址前面带有“https://”它可以正常工作。
  • @gunnerone 我设置了断点,可以手动使用 Ctrl + V 将链接粘贴到地址栏中,但 generateLink 仍然是空的。
  • Read Text from Clipboard的可能重复
  • 尝试了类似的问题解决方案,但没有成功

标签: c# google-chrome selenium selenium-webdriver selenium-chromedriver


【解决方案1】:

要使用从 剪贴板 复制的 URL 打开一个新选项卡,您需要引用命名空间 System.Windows.Forms 和您可以使用以下解决方案:

using System.Windows.Forms;
// other code
string myURL = Clipboard.GetText()
((IJavaScriptExecutor)_chromeDriver).ExecuteScript("window.open('" + myURL +"');");

【讨论】:

  • 我有一个对命名空间的引用,如上面的问题所示。但不是从剪贴板返回 url,而是一个空字符串
  • 如果 URL 完全复制到剪贴板,此代码块将满足您的需要。似乎 URL 没有复制到 剪贴板。您能否使用相关代码更新问题,您如何处理 Alert Box 以分析 url 是否被正确复制?
【解决方案2】:

如果要设置地址栏的url,解决方法如下:

((IJavaScriptExecutor)Driver).ExecuteScript("navigator.clipboard.readText().then(text => window.location.replace(text));");

或使用TextCopy package:

Driver.Navigate().GoToUrl(new TextCopy.Clipboard().GetText());

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-16
    • 2013-12-06
    • 2023-04-08
    • 1970-01-01
    相关资源
    最近更新 更多