Powershell Selenium使用FindElementByCssSelector选择下拉菜单

Powershell Selenium使用FindElementByCssSelector选择下拉菜单,powershell,selenium,drop-down-menu,Powershell,Selenium,Drop Down Menu,我正在使用Selenium尝试打开网页,输入登录凭据,单击登录按钮,单击新建更改控制选项,然后输入我的姓名并从下拉列表中选择它。我一直在工作,直到下拉部分。这是我的录音照片: 下面是我正在使用的代码(我使用Selenium模块,因为我认为这会让生活更轻松),我对用户名和密码进行了模糊处理,这样它就不会显示在明文中 $LandeskUrl = "The site I'm going to is here" $Driver = Start-SeChrome Enter-SeUrl $Landes

我正在使用Selenium尝试打开网页,输入登录凭据,单击登录按钮,单击新建更改控制选项,然后输入我的姓名并从下拉列表中选择它。我一直在工作,直到下拉部分。这是我的录音照片:

下面是我正在使用的代码(我使用Selenium模块,因为我认为这会让生活更轻松),我对用户名和密码进行了模糊处理,这样它就不会显示在明文中

$LandeskUrl = "The site I'm going to is here"

$Driver = Start-SeChrome
Enter-SeUrl $LandeskUrl -Driver $Driver

###Logon screen

#user name
$UserName = Find-SeElement -Driver $Driver -Id "Ecom_User_ID"
Send-SeKeys -Element $UserName -Keys $passCreds.UserName

#password field
$Password = Find-SeElement -Driver $Driver -Id "Ecom_User_Password"
Send-SeKeys -Element $Password -Keys $thePass

#click logon button
$LogonButton = Find-SeElement -Drive $Driver -Id "logonButton"
Invoke-SeClick -Element $LogonButton

##Landesk screen

#select "Create New Change Control"
$NewCCR = Find-SeElement -Drive $Driver -Id "shortcutItem_4765085e-1b8b-44a1-a896-883efb86f151"
Invoke-SeClick -Element $NewCCR

#select user field and type name
$User = Find-SeElement -Drive $Driver -Id "mainForm-RaiseUser2Display"
Send-SeKeys -Element $User -Keys "My user name here"

#THIS IS WHERE I'M HAVING TROUBLE
$dropDown = $Driver.FindElementByCssSelector(".dropdownItem:nth-child(2)");
Invoke-SeClick -Element $dropDown
以下是我正在测试的页面的HTML以及链接:


编辑以反映您添加到与下拉选项选择器相关的原始帖子中的评论

为下拉菜单提供以下HTML:

<div class="dropdownContent" style="height: 502.5px; overflow-y: auto;"><div class="dropdownItem" value="00000000-0000-0000-0000-000000000000" params="{}">

谢谢你的帮助,克莉丝汀!在此之后,我深入研究了xpath的用法。在拔出头发并尝试不同的事情(包括抛弃我发现的selenium模块、合并Firebug等)之后,我通过添加一个Start Sleep(wait)语句使它能够工作。它只是没有找到下拉列表,因为我想我没有等它弹出

Start-sleep -s 2
$ChromeDriver.FindElementByClassName("dropdownSelectedItem").click()

现在它工作了!快乐

晚会迟到了,但我发现这对我很有效,可能对你也有效

$Value = '2'
$Option = Find-SeElement -Driver $Driver -XPath "/html/body/div/select"

$SelectElement = [OpenQA.Selenium.Support.UI.SelectElement]::new($Option)
$SelectElement.SelectByValue($Value)
我的HTML元素如下所示,将使用上面的脚本选择西瓜

<select class="custom-select">
      <option selected="">Open this select menu</option>
      <option value="1">Banana</option>
      <option value="2">Watermelon</option>
      <option value="3">Mango</option>
</select>

打开此选择菜单
香蕉
西瓜
芒果

我们至少需要HTML元素周围的某些部分来检查选择器,否则我们无法帮助您。看起来您的选择器无法在页面上找到元素。你能从你正在测试的页面源中发布一些HTML吗?在不查看页面源代码的情况下,很难确定选择器可能有什么问题。基于异常,有些人认为您在代码中传递的元素有错误,请共享DOM文件,该文件将帮助我们解决您的问题。我不知道你为什么有css,它没有ID吗?如果它有ID,我就找不到。在你输入一个名字后,它会把名字拉出来,有很多用户名(多页),这是怎么回事?
# First expand the dropdown
$dropDown = $Driver.FindElementByXPath("//div[@class='dropdownContent']");
Invoke-SeClick -Element $dropDown

# Not sure on the syntax but you may need to Invoke WebDriverWait here, before you can click element.

# Click the desired option
$dropdownOption = $Driver.FindElementByXPath("//div[text()='mylastname, myfirstname']");
Invoke-SeClick -Element $dropdownOption
Start-sleep -s 2
$ChromeDriver.FindElementByClassName("dropdownSelectedItem").click()
$Value = '2'
$Option = Find-SeElement -Driver $Driver -XPath "/html/body/div/select"

$SelectElement = [OpenQA.Selenium.Support.UI.SelectElement]::new($Option)
$SelectElement.SelectByValue($Value)
<select class="custom-select">
      <option selected="">Open this select menu</option>
      <option value="1">Banana</option>
      <option value="2">Watermelon</option>
      <option value="3">Mango</option>
</select>