我想自动化 ssh 登录。经过一些研究,似乎 tcl/expect 是要走的路线。
但是,我的问题是,当交互接管我的终端时,东西不能按预期工作(不是故意的)。
例如,如果我调整终端的大小,它不会“占用”。此外,有时交互没有响应,有时它只是无缘无故地挂起。我在下面包含了我的代码。我对代码的问题是,我错过了什么吗?
另外,有没有更好的方法来做到这一点(使用另一种脚本语言?)我需要终端非常敏感,这与我在控制台上手动输入 ssh 没有什么不同。
proc Login {username server password} {
set prompt "(%|>|\#|\\\$) $"
spawn /usr/bin/ssh $username@$server
expect {
-re "Are you sure you want to continue connecting (yes/no)?" {
exp_send "yes\r"
exp_continue
#continue to match statements within this expect {}
}
-nocase "password: " {
exp_send "$password\r"
interact
}
}
}
Run Code Online (Sandbox Code Playgroud) 我尝试自动化我的项目,因为我需要完全:
- 从 SVN 更新文件
-仅将更改的文件上传到默认服务器
是否有任何方法可以通过 PhpStorm(设置..)做到这一点,
或者我是否需要外部工具?
谢谢你的答案
我正在使用 watir-webdriver 来自动化和测试应用程序。在此过程中,我需要单击下拉菜单并选择一个值,但是 watir 似乎无法选择该项目。请帮忙?
我的代码:
browser.text_field(:id => "user_username").set "#{username}"
browser.select_list(:id => 'user_date_of_birth_month').clear
puts browser.select_list(:id => 'user_date_of_birth_month').options
browser.select_list(:id => 'user_date_of_birth_month').select "9"
Run Code Online (Sandbox Code Playgroud)
HTML:
<label class="sc-font-light sc-text-light next-light-label" for="user_date_of_birth_month
2. When were you born?<span class="inline-help"><span class="content hidden">For information on why we ask for your date of birth, see <a href="http://help.soundcloud.com/customer/portal/articles/1481474-why-do-you-need-my-date-of-birth-" target="_blank">this help center article</a>.</span></span>
Run Code Online (Sandbox Code Playgroud)
<div class="width_1_2"><select id="user_date_of_birth_month"name="user[date_of_birth][month]">
<option value="">Month</option>
<option value="1">January</option>
<option value="2">February</option>
<option value="3">March</option>
<option value="4">April</option>
<option value="5">May</option>
<option value="6">June</option>
<option value="7">July</option>
<option value="8">August</option>
<option value="9">September</option>
<option value="10">October</option>
<option value="11">November</option>
<option …Run Code Online (Sandbox Code Playgroud) 这是我第一次使用 Selenium Web Driver(使用 Python),我试图转到搜索框,输入内容并点击提交。
相关的 HTML 如下所示:
<iframe id="mainFrame" class="" width="100%" height="" frameborder="0" title="Main content frame" onload="initFrame();" scrolling
....
<tr>
<td style="vertical-align:middle;">
<input id="terms" type="text" onblur="RevertText(this,'Enter Search Terms');" onfocus="AllowType(this,'Enter Search Terms')" value="Enter Search Terms" style="color: rgb(164, 164, 164);"></input>
</td>
<td style="vertical-align:middle;">
<input id="srchButt" class="buttAcdmicOne" type="submit" value="Search"></input>
</td>
</tr>
Run Code Online (Sandbox Code Playgroud)
我的代码如下所示:
driver.switch_to.frame("mainFrame")
elem = driver.find_element_by_id("terms")
elem.send_keys("Test")
Run Code Online (Sandbox Code Playgroud)
但这不起作用,我不知道为什么它不起作用......(可能有多个带有术语 id 的东西?)
编辑:
我收到的错误是:
selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element: {"method":"id","selector":"terms"}
Run Code Online (Sandbox Code Playgroud)
我收到的新错误是:
selenium.common.exceptions.NoSuchFrameException: Message: no such frame: element is not a frame
Run Code Online (Sandbox Code Playgroud)
<iframe id="mainFrame" …Run Code Online (Sandbox Code Playgroud)我设计了这种架构,其中所有测试用例都在 Amazon.robot 文件中,机器人框架的所有低级关键字都将在两个单独的文件中(AmazonGui.robot 和 Commons.robot)
包含所有测试用例的 Amazon.robot 文件:
*** Settings ***
Documentation This is some basic infor the whole suite
Resource Resources/AmazonGui.robot
Resource Resources/Common.robot
*** Variables ***
*** Test Cases ***
User must sign in to check out
[Documentation] This is some basic info about test
[Tags] Smoke
Common.Begin Web Test
AmazonGui.Search for Products
AmazonGui.Select Product from Search Results
AmazonGui.Add Product to Cart
AmazonGui.Begin Checkout
Common.End Web Test
Run Code Online (Sandbox Code Playgroud)
我还有另外两个具有低关键字的资源文件,所以基本上测试用例(Amazon.robot)正在调用低级关键字文件(Common.robot 和 AmazonGui.robot)。我已将资源文件导入到测试用例文件中。
AmazonGui.robot 文件,包含用于测试用例的低级关键字
*** Settings ***
Library Selenium2Library
*** Keywords …Run Code Online (Sandbox Code Playgroud) 我有一个带有页面对象模型的测试自动化框架。我所有的测试都位于同一个包中的不同类中。
在 testng.xml 我有
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="Smoke Test">
<test name="SmokeTest">
<classes>
<class name="name.test1"/>
<class name="name.test2"/>
<class name="name.test3"/>
</classes>
</test>
</suite>
Run Code Online (Sandbox Code Playgroud)
问题是在运行 TestNG.xml 之后,如果第一个测试失败,它将停止测试执行。但我想继续执行所有测试用例。
我在我的项目中使用 Jenkins,如果其中一项测试失败,它会立即停止执行。
测试示例
public class LoginTestTest {
public AndroidDriver<AndroidElement> driver;
public AOWebClient aoWebClient;
AOWebClient aoWeb;
public LoginTestTest(AndroidDriver<AndroidElement> driver, AOWebClient aoWeb){
this.driver = driver;
this.aoWeb = aoWeb;
PageFactory.initElements(new AppiumFieldDecorator(driver), this);
}
public LoginTestTest() {
}
SoftAssert softAssert = new SoftAssert();
@BeforeClass
public void setUp() throws Exception {
driver = DesiredCapabilitiesSetup.startAppiumServer();
aoWebClient = DesiredCapabilitiesSetup.getAOWeb();
LogIn …Run Code Online (Sandbox Code Playgroud) 这是我的功能文件 功能:作为访问者,我应该能够加载主页
@javascript @program
Scenario: View first page
When I fill in the following:
| username | myusername |
| password | mypass |
And press "Login"
Then I should see "Dashboard"
Then I go to "/programs/list"
Run Code Online (Sandbox Code Playgroud)
我的 composer.json 如下:
{
"require": {
"behat/mink-extension": "^2.2",
"behat/mink-goutte-driver": "^1.2",
"behat/mink-selenium2-driver": "^1.3"
}
}
Run Code Online (Sandbox Code Playgroud)
我的 behat.yml 文件如下:
default:
extensions:
Behat\MinkExtension:
base_url: http://myURL.com
selenium2: ~
browser_name: 'chrome'
suites:
defaults:
contexts:
- FeatureContext
- Behat\MinkExtension\Context\MinkContext
Run Code Online (Sandbox Code Playgroud)
我的 FeatureContext.php 文件是
class FeatureContext extends MinkContext implements Context, SnippetAcceptingContext …Run Code Online (Sandbox Code Playgroud) Rundeck 将传递给作业的所有选项$RD_OPTION_*设置为环境变量,但当在具有不同 ssh 端口的远程节点中执行作业时,它不会设置这些变量。脚本成功登录到远程节点,但没有环境变量。请帮我解决。
示例作业定义:
<joblist>
<job>
<context>
<options preserveOrder='true'>
<option name='option1' required='true' />
</options>
</context>
<description>job description</description>
<dispatch>
<excludePrecedence>true</excludePrecedence>
<keepgoing>false</keepgoing>
<rankOrder>ascending</rankOrder>
<threadcount>1</threadcount>
</dispatch>
<executionEnabled>true</executionEnabled>
<id>id</id>
<loglevel>DEBUG</loglevel>
<name>job name</name>
<nodefilters>
<filter>name: remote_node</filter>
</nodefilters>
<nodesSelectedByDefault>true</nodesSelectedByDefault>
<notification>
<onfailure>
<email attachLog='true' recipients='abcdef@xyz.com' subject='job failure :(' />
</onfailure>
<onsuccess>
<email recipients='abcdef@xyz.com' subject='job succes' />
</onsuccess>
</notification>
<scheduleEnabled>true</scheduleEnabled>
<sequence keepgoing='false' strategy='step-first'>
<command>
<exec>python path/to/script.py $RD_OPTION_OPTION1 > /path/to/logfile_$RD_JOB_EXECID.log 2>&1</exec>
</command>
<command>
<exec>java -jar path/to/jarfile.jar ${option.option1} >> "/path/to/logfile_${job.execid}.log" 2>&1</exec>
</command>
</sequence>
<uuid>job-uuid</uuid>
</job>
</joblist>
<!-- …Run Code Online (Sandbox Code Playgroud)我正在尝试尽可能简单地自动化 GroupMe 机器人。从命令行发送消息的一种简单方法是使用以下命令:
curl -d '{"text" : "Your message here", "bot_id" : "this_is_a_secret_string"}' https://api.groupme.com/v3/bots/post
Run Code Online (Sandbox Code Playgroud)
在 Shell 脚本中,我想替换"Your message here"为var,其中var被设置为来自不同命令的输出。这可能吗?
我用它替换了“您的消息”的事情不起作用:
var
$var
(var)
$(var)
{var}
${var}
Run Code Online (Sandbox Code Playgroud)
双引号 ("") 内的任何内容都被视为字符串,因此在这些方面没有做太多尝试。
我有一段代码可以运行目录中的所有脚本: 运行文件夹中的所有shell脚本
for f in *.sh; do \
bash "$f" -H || break
done
Run Code Online (Sandbox Code Playgroud)
我也有运行一系列.sh脚本的代码:
for f in {1..3}madeupname.sh; do \
bash "$f" -H || break
done
Run Code Online (Sandbox Code Playgroud)
现在,我不想运行所有.sh脚本或一系列.sh脚本,而是要运行“ N”个.sh脚本,其中N是任意数量,例如3个.sh脚本。
对我来说,N个文件的运行顺序并不重要。